package manager.principal.dao;

import java.sql.SQLException;
import manager.auxiliares.MensagemExcessao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.LinkedList;
import manager.principal.fonte.JanelaLogin;
import manager.interfaces.InterfaceDao;

/**
 * Esta classe será utilizada para cadastra a entidade user no banco de dados
 *
 * @author Thiago
 */
public class EnderecoDao implements InterfaceDao {

    private int id;
    private String endereco;
    private String bairro;
    private String cep;
    private String numero;
    private String complemento;
    private int idCidade;

    /**
     * Inicializando as variáveis
     */
    public EnderecoDao() {
        resetValues();
        id = 0;
    }

    private void resetValues() {
        endereco = "";
        bairro = "";
        cep = "";
        complemento = "";
        idCidade = 0;
    }

    /**
     * Carregar as informações do objeto usuário a partir de um id
     *
     * @param id Id do usuário buscado
     */
    public void buscar(int id) {
        try {
            setId(id);
            String sql = "SELECT * FROM endereco WHERE id = ? ";
            PreparedStatement preparedStatement = JanelaLogin.getConnection().prepareStatement(sql);
            preparedStatement.setInt(1, id);
            ResultSet resultSet = preparedStatement.executeQuery();
            if (resultSet.first()) {
                endereco = resultSet.getString("tx_endereco");
                cep = resultSet.getString("tx_cep");
                numero = resultSet.getString("tx_numero");
                complemento = resultSet.getString("tx_complemento");
                endereco = resultSet.getString("tx_endereco");
                bairro = resultSet.getString("tx_bairro");
                idCidade = resultSet.getInt("id_cidade");
            }
            resultSet.close();
            preparedStatement.close();
        } catch (Exception e) {
            MensagemExcessao.mostrarMensagem(e, "Buscando Endereços");
        }
    }

    /**
     * Insere um usuário no banco
     */
    public void inserir() throws SQLException {
        String sql = "INSERT INTO endereco ("
                + "tx_endereco,"
                + "tx_cep,"
                + "tx_numero,"
                + "tx_complemento,"
                + "id_cidade,"
                + "tx_bairro) "
                + "VALUES ("
                + "?," // 01 endereço
                + "?," // 02 cep
                + "?," // 03 numero
                + "?," // 04 complemento
                + "?," // 05 cidade
                + "?)"; // 06 bairro
        PreparedStatement preparedStatement = JanelaLogin.getConnection().prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
        preparedStatement.setString(1, endereco);
        preparedStatement.setString(2, cep);
        preparedStatement.setString(3, numero);
        preparedStatement.setString(4, complemento);
        preparedStatement.setInt(5, idCidade);
        preparedStatement.setString(6, bairro);
        preparedStatement.executeUpdate();

        //Recebendo o novo id gerado
        ResultSet resultSet = preparedStatement.getGeneratedKeys();
        while (resultSet.next()) {
            id = resultSet.getInt(1);
        }

        preparedStatement.close();
        resultSet.close();
    }

    /**
     * Atualiza o endereço no banco
     */
    public void atualizar() throws SQLException {
        String sql = "UPDATE "
                + "endereco "
                + " SET "
                + "tx_endereco = ?, "
                + "tx_cep = ?,"
                + "tx_numero = ?,"
                + "tx_complemento = ?,"
                + "id_cidade = ?,"
                + "tx_bairro = ? WHERE id = ?";
        PreparedStatement preparedStatement = JanelaLogin.getConnection().prepareStatement(sql);
        preparedStatement.setString(1, endereco);
        preparedStatement.setString(2, cep);
        preparedStatement.setString(3, numero);
        preparedStatement.setString(4, complemento);
        preparedStatement.setInt(5, idCidade);
        preparedStatement.setString(6, bairro);
        preparedStatement.setInt(7, id);
        preparedStatement.executeUpdate();
        preparedStatement.close();
    }

    public void deletar() throws SQLException {
        String sql = "DELETE FROM endereco WHERE id = ? ";
        PreparedStatement preparedStatement = JanelaLogin.getConnection().prepareStatement(sql);
        preparedStatement.setInt(1, id);
        preparedStatement.executeUpdate();

        preparedStatement.close();
    }

    public String getBairro() {
        return bairro;
    }

    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    public String getCep() {
        return cep;
    }

    public void setCep(String cep) {
        this.cep = cep;
    }

    public String getComplemento() {
        return complemento;
    }

    public void setComplemento(String complemento) {
        this.complemento = complemento;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getIdCidade() {
        return idCidade;
    }

    public void setIdCidade(int idCidade) {
        this.idCidade = idCidade;
    }

    public String getNumero() {
        return numero;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }

    public LinkedList<String> buscar(String opcao, String buscado, boolean limite) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
